package com.tarzan.system.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tarzan.api.model.request.user.InserUserInfoReq;
import com.tarzan.api.model.request.user.SysUserIdReq;
import com.tarzan.api.model.request.user.SysUserInfoReq;
import com.tarzan.api.model.request.user.UpdateUserInfoReq;
import com.tarzan.api.model.response.user.SysUserDetailInfoResp;
import com.tarzan.api.model.response.user.SysUserInfoResp;
import com.tarzan.api.model.response.user.UserRolePermissionsInfoResp;
import com.tarzan.system.entity.SysUser;

import java.util.List;
import java.util.Set;

/**
 * @author liujinshan
 * @title: ISysUserService
 * @projectName tarzan-cloud
 * @description: TODO
 * @date 2021-5-19 21:39
 */
public interface ISysUserService  extends IService<SysUser> {


    /**
     * 根据id 查询用户信息
     * @param sysUserIdReq
     * @return
     */
    SysUserInfoResp getUserInfoById(SysUserIdReq sysUserIdReq);

    /**
     * 分页查询
     * @param sysUserInfoReq
     * @return
     */
    IPage<SysUserInfoResp> getPageUserInfo(SysUserInfoReq sysUserInfoReq);

    /**
     * 新增用户
     * @param inserUserInfoReq
     */
    void insert(InserUserInfoReq inserUserInfoReq);

    /**
     * 更新用户信息
     * @param updateUserInfoReq
     */
    void update(UpdateUserInfoReq updateUserInfoReq);

    /**
     * 删除用户信息
     * @param sysUserIdReq
     */
    void delete(SysUserIdReq sysUserIdReq);

    /**
     * 查询该用户是否存在
     * @param userName
     * @return
     */
    SysUser findByuserName(String userName);

    /**
     * 查询该用户权限
     * @param userName
     * @return
     */
    Set<String> findPermissions(String userName);

    /**
     * 获取用户基本信息、角色信息、权限信息
     * @param userName
     * @return
     */
    UserRolePermissionsInfoResp getUserInfo(String userName);

    /**
     * 批量删除
     * @param ids
     */
    void deleteBatchByIds(List ids);

    /**
     * @title findUserInfoByUserName
     * @description TODO 根据用户名称查询用户信息
     * @param username
     * @return com.tarzan.api.model.response.user.SysUserInfoResp
     * @author liujinshan
     * @data 2021/7/1 15:48
     */
    SysUserDetailInfoResp findUserInfoByUserName(String username);
}
